/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Entidades.Asesor;
import Entidades.Docente;
import Entidades.Estudiante;
import Entidades.Persona;
import Entidades.Prestamo;
import Entidades.Proyecto;
import Modelo.FachadaAsesor;
import Modelo.FachadaDocente;
import Modelo.FachadaEstudiante;
import Modelo.FachadaPersona;
import Modelo.FachadaPrestamo;
import Modelo.FachadaProyecto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Julian
 */
@SessionScoped
@ManagedBean(name = "controladorPrestamo")
public class ControladorPrestamo implements Serializable {

    private Prestamo prestamo;
    private Persona persona;
    private Date fechaSol = new Date();
    private Date fechaDevolucion;
    private String formatCd;
    private String formatDoc;
    private String titulo;

    @EJB
    private FachadaPersona fachadapersona;

    @EJB
    private FachadaPrestamo fachadaPrestamo;

    @EJB
    private FachadaProyecto fachadaProyecto;

    private ArrayList<Prestamo> prestamos;
    private ArrayList<Persona> personas;
    private ArrayList<Docente> docentes;
    private ArrayList<Estudiante> estudiantes;
    private ArrayList<Asesor> asesores;

    public ControladorPrestamo() {
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public Persona getNombre() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public FachadaPersona getFachadapersona() {
        return fachadapersona;
    }

    public void setFachadapersona(FachadaPersona fachadapersona) {
        this.fachadapersona = fachadapersona;
    }

    public Prestamo getPrestamo() {
        return prestamo;
    }

    public void setPrestamo(Prestamo prestamo) {
        this.prestamo = prestamo;
    }

    public String solicitarPrestamo() {
        return "solicitarPrestamo";
    }

    private void mostrarMensaje(String mensaje) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje, null);
        facesContext.addMessage(null, facesMessage);
    }

    private void mostrarError(String mensaje) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje, null);
        facesContext.addMessage(null, facesMessage);
    }

    public boolean validadFormatosPrestamo(Proyecto proyec) {
        boolean d = true;
        if (proyec.getDisponibilidadCd().equals("no")) {
            if (formatCd.equals("true")) {
                mostrarError("EL FORMATO CD NO SE ENCUENTRA DISPONIBLE");
                d = false;
            }
        }

        if (proyec.getDisponibilidadDocumento().equals("no")) {
            if (formatDoc.equals("true")) {
                mostrarError("EL FORMATO DOCUMENTO NO SE ENCUENTRA DISPONIBLE");
                d = false;
            }
        }
        if (formatCd.equals("true") && formatDoc.equals("true") && d==true) {
            if (proyec.getDisponibilidadCd().equals("no")) {
                mostrarError("EL FORMATO CD NO SE ENCUENTRA DISPONIBLE");
                d = false;
            }
            if (proyec.getDisponibilidadDocumento().equals("no")) {
                mostrarError("EL FORMATO DOCUMENTO NO SE ENCUENTRA DISPONIBLE");
                d = false;
            }
        }
         if(formatCd.equals("false") && formatDoc.equals("false")){
                mostrarError("DEBE SELECCIONAR UN FORMATO PARA EL PRESTAMO");
                d=false;
            }
         if(fechaDevolucion==null)
           {
             mostrarError("DEBE INGRESAR UNA FECFHA PARA PRESTAMO");
             d=false;
           }
       
         
        
        return d;
    }

    public void validar(Proyecto proyec, Persona persona) 
    {
       
        System.out.println("la persona es : " + persona.getNombre());
        System.out.println("el proyecto es : " + proyec.getTitulo());
        System.out.println("la fecha de solicitud es : " + getFechaSol());
        System.out.println("la fecha de devolucion es : " + getFechaDevolucion());

        System.out.println("el formato cd es : " + formatCd);
        System.out.println("el formato documento es : " + formatDoc);
        
       

        boolean va = validadFormatosPrestamo(proyec);
        if (va == true) {
            prestamo = new Prestamo();
            prestamo.setTituloProyecto(proyec.getTitulo());
            prestamo.setCedulaPersona(persona.getCedula());
            prestamo.setFechaPrestamo(getFechaSol());
            prestamo.setFechaEntrega(getFechaDevolucion());
            prestamo.setFormatoCD(getFormatCd());
            prestamo.setFormatoDcumento(getFormatDoc());
            String dcd = proyec.getDisponibilidadCd();
            String ddoc = proyec.getDisponibilidadDocumento();
            
            if (formatCd.equals("true")) {
                dcd = "no";
            }
          
            if (formatDoc.equals("true")) {
                ddoc = "no";
            }

           
         
            fachadaPrestamo.crear(prestamo);
            mostrarMensaje("EXITOSO EL REGISTRO DEL PRESTAMO");
            fachadaProyecto.cambiardisponibilidadcd(proyec.getTitulo(), dcd);
            fachadaProyecto.cambiardisponibilidaddocumento(proyec.getTitulo(), ddoc);
        }
    }
    

    /**
     * @return the fechaSol
     */
    public Date getFechaSol() {
        return fechaSol;
    }

    /**
     * @param fechaSol the fechaSol to set
     */
    public void setFechaSol(Date fechaSol) {
        this.fechaSol = fechaSol;
    }

    /**
     * @return the fechaDevolucion
     */
    public Date getFechaDevolucion() {
        return fechaDevolucion;
    }

    /**
     * @param fechaDevolucion the fechaDevolucion to set
     */
    public void setFechaDevolucion(Date fechaDevolucion) {
        this.fechaDevolucion = fechaDevolucion;
    }

    /**
     * @return the formatCd
     */
    public String getFormatCd() {
        return formatCd;
    }

    /**
     * @param formatCd the formatCd to set
     */
    public void setFormatCd(String formatCd) {
        this.formatCd = formatCd;
    }

    /**
     * @return the formatDoc
     */
    public String getFormatDoc() {
        return formatDoc;
    }

    /**
     * @param formatDoc the formatDoc to set
     */
    public void setFormatDoc(String formatDoc) {
        this.formatDoc = formatDoc;
    }

    /**
     * @return the fachadaPrestamo
     */
    public FachadaPrestamo getFachadaPrestamo() {
        return fachadaPrestamo;
    }

    /**
     * @param fachadaPrestamo the fachadaPrestamo to set
     */
    public void setFachadaPrestamo(FachadaPrestamo fachadaPrestamo) {
        this.fachadaPrestamo = fachadaPrestamo;
    }

    /**
     * @return the prestamos
     */
    public ArrayList<Prestamo> getPrestamos() {
        return prestamos;
    }

    /**
     * @param prestamos the prestamos to set
     */
    public void setPrestamos(ArrayList<Prestamo> prestamos) {
        this.prestamos = prestamos;
    }

    /**
     * @return the personas
     */
    public ArrayList<Persona> getPersonas() {
        return personas;
    }

    /**
     * @param personas the personas to set
     */
    public void setPersonas(ArrayList<Persona> personas) {
        this.personas = personas;
    }

    /**
     * @return the docentes
     */
    public ArrayList<Docente> getDocentes() {
        return docentes;
    }

    /**
     * @param docentes the docentes to set
     */
    public void setDocentes(ArrayList<Docente> docentes) {
        this.docentes = docentes;
    }

    /**
     * @return the estudiantes
     */
    public ArrayList<Estudiante> getEstudiantes() {
        return estudiantes;
    }

    /**
     * @param estudiantes the estudiantes to set
     */
    public void setEstudiantes(ArrayList<Estudiante> estudiantes) {
        this.estudiantes = estudiantes;
    }

    /**
     * @return the asesores
     */
    public ArrayList<Asesor> getAsesores() {
        return asesores;
    }

    /**
     * @param asesores the asesores to set
     */
    public void setAsesores(ArrayList<Asesor> asesores) {
        this.asesores = asesores;
    }

}
